package es.ucm.fdi.xtremeaudio.vista;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;

import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.border.LineBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;
import javax.swing.text.BadLocationException;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;

import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

import es.ucm.fdi.xtremeaudio.controlador.Controlador;

public class FormPrincipal {
	/*--- ATRIBUTOS ---*/
	private JFrame ventana;
	private JPanelImagen panelVentana;
	private JPanelImagen panelSuperior;
	private JMenuBar barraMenu;
	private JMenu menu;
	private JMenu menuBiblioteca;
	private JMenuItem menuItemImportarArchivos;
	private JMenuItem menuItemImportarCarpeta;
	private JMenuItem menuItemCrearLista;
	private JMenuItem menuItemAbrirLista;
	private JMenuItem menuItemGuardar;
	private JMenuItem menuItemGuardarListaComo;
	private JMenu menuReproduccion;
	private JMenuItem menuItemPlay;
	private JMenuItem menuItemStop;
	private JMenuItem menuItemRetroceder;
	private JMenuItem menuItemAvanzar;
	private JMenuItem menuItemAnterior;
	private JMenuItem menuItemSiguiente;
	private JMenuItem menuItemAyuda;
	private JMenuItem menuItemSalir;
	private JLabel labelTitulo;
	private JButton botonAyuda;
	private JButton botonMinimizar;
	private JButton botonSalir;
	private JPanel panelBiblioteca;
	private JPanel panelArbol;
	private JScrollPane scrollPaneArbol;
	private JTree arbolBiblioteca;
	private JPanel panelInfo;
	private JPanelImagen panelCaratula;
	private JLabel labelCaratula;
	private JLabel labelPropiedades;
	private JScrollPane scrollPaneInfo;
	private JTable tablaInfo;
	private JPanel panelLista;
	private JScrollPane scrollPaneLista;
	private JTable tablaLista;
	private JTextField fieldBuscar;
	private JButton botonEditar;
	private JPanel panelBarraBotones;
	private JButton botonAnyadir;
	private JButton botonEliminar;
	private JButton botonLimpiar;
	private JButton botonAbrir;
	private JButton botonGuardar;
	private JPanelImagen panelReproduccion;
	private JPanel panelBotones;
	private JPanel panelI;
	private JButton botonAnterior;
	private JButton botonRetroceder;
	private JPanel panelC;
	private JButton botonPlay;
	private JButton botonStop;
	private JPanel panelD;
	private JButton botonAvanzar;
	private JButton botonSiguiente;
	private JPanel panelEstado;
	private JSlider progreso;
	private JLabel labelArchivo;
	private JPanel panelActual;
	private JLabel labelPista;
	private JLabel labelTiempo;
	private JLabel labelEstado;
	private JPanel panelVolGeneral;
	private JPanel panelOpciones;
	private JPanel panelVolumen;
	private JLabel labelRepetir;
	private JLabel labelAleatorio;
	private JLabel labelVolumen;
	private JSlider volumen;

	private boolean reproducible;
	private static Font fuente;
	private static Integer ancho;
	private static Integer alto;
	private static Color color = new Color(255, 102, 0);
	private static Color colorBorde = new Color(255, 157, 92);

	/*--- CONSTRUCTORA ---*/
	public FormPrincipal() {
		initLookAndFeel();
		initComponents();
		reproducible = false;
	}

	/*--- METODOS PRIVADOS ---*/
	private void initLookAndFeel() {
		// Establece el Look&Feel
		UIManager.put("nimbusBase", new Color(245, 94, 0));
		UIManager.put("Table.alternateRowColor", new Color(251, 241, 231));
		UIManager.put("nimbusFocus", Color.black);
		UIManager.put("nimbusSelectionBackground", colorBorde);
		UIManager.put("nimbusSelectedText", Color.black);
		UIManager.put("control", new Color(141, 141, 141));

		try {
			for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
				if ("Nimbus".equals(info.getName())) {
					UIManager.setLookAndFeel(info.getClassName());
					break;
				}
			}
		} catch (Exception e) {
			try {
				UIManager.setLookAndFeel(UIManager
						.getSystemLookAndFeelClassName());
			} catch (ClassNotFoundException e1) {
				e1.printStackTrace();
			} catch (InstantiationException e1) {
				e1.printStackTrace();
			} catch (IllegalAccessException e1) {
				e1.printStackTrace();
			} catch (UnsupportedLookAndFeelException e1) {
				e1.printStackTrace();
			}
		}

		// Carga la fuente personalizada
		try {
			fuente = Font.createFont(
					Font.TRUETYPE_FONT,
					new File(FormPrincipal.class.getClassLoader()
							.getResource("img/D3_Archism.ttf").toString()
							.substring(6)));
			GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(
					fuente);
		} catch (FontFormatException e1) {
			e1.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		if (fuente == null) {
			fuente = new Font(null); // Fuente por defecto
		}
		// Obtiene las dimensiones de la pantalla
		Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
		if (((float) screen.width / (float) screen.height) > 1.25) { // Panorámica
			ancho = new Integer((int) (screen.width / 1.8));
			alto = new Integer((int) (screen.height / 1.75));
		} else {
			ancho = new Integer((int) (screen.width / 1.8));
			alto = new Integer((int) (screen.height / 2.1));
		}
	}

	private void initComponents() {
		ventana = new JFrame();
		panelVentana = new JPanelImagen("img/fondo_1200x700.png");
		panelSuperior = new JPanelImagen("img/fondo_1100x60.png");
		barraMenu = new JMenuBar();
		menu = new JMenu();
		menuBiblioteca = new JMenu();
		menuItemImportarArchivos = new JMenuItem();
		menuItemImportarCarpeta = new JMenuItem();
		menuItemCrearLista = new JMenuItem();
		menuItemAbrirLista = new JMenuItem();
		menuItemGuardar = new JMenuItem();
		menuItemGuardarListaComo = new JMenuItem();
		menuReproduccion = new JMenu();
		menuItemPlay = new JMenuItem();
		menuItemStop = new JMenuItem();
		menuItemRetroceder = new JMenuItem();
		menuItemAvanzar = new JMenuItem();
		menuItemAnterior = new JMenuItem();
		menuItemSiguiente = new JMenuItem();
		menuItemAyuda = new JMenuItem();
		menuItemSalir = new JMenuItem();
		labelTitulo = new JLabel();
		botonAyuda = new JButton();
		botonMinimizar = new JButton();
		botonSalir = new JButton();
		panelBiblioteca = new JPanel();
		scrollPaneArbol = new JScrollPane();
		panelArbol = new JPanel();
		arbolBiblioteca = new JTree();
		panelInfo = new JPanel();
		panelCaratula = new JPanelImagen("img/fondo_400x400.png");
		labelCaratula = new JLabel();
		labelPropiedades = new JLabel();
		scrollPaneInfo = new JScrollPane();
		fieldBuscar = new JTextField();
		botonEditar = new JButton();
		tablaInfo = new JTable();
		panelLista = new JPanel();
		scrollPaneLista = new JScrollPane();
		tablaLista = new JTable();
		panelBarraBotones = new JPanel();
		botonAnyadir = new JButton();
		botonEliminar = new JButton();
		botonLimpiar = new JButton();
		botonAbrir = new JButton();
		botonGuardar = new JButton();
		panelReproduccion = new JPanelImagen("img/fondo_1100x60.png");
		panelBotones = new JPanel();
		panelI = new JPanel();
		botonAnterior = new JButton();
		botonRetroceder = new JButton();
		panelC = new JPanel();
		botonPlay = new JButton();
		botonStop = new JButton();
		panelD = new JPanel();
		botonAvanzar = new JButton();
		botonSiguiente = new JButton();
		panelEstado = new JPanel();
		progreso = new JSlider();
		labelArchivo = new JLabel();
		panelActual = new JPanel();
		labelPista = new JLabel();
		labelTiempo = new JLabel();
		labelEstado = new JLabel();
		panelVolGeneral = new JPanel();
		panelOpciones = new JPanel();
		panelVolumen = new JPanel();
		labelRepetir = new JLabel();
		labelAleatorio = new JLabel();
		labelVolumen = new JLabel();
		volumen = new JSlider(JSlider.VERTICAL, 0, 100, 50);
		CellConstraints cc = new CellConstraints();

		/*--- DIMENSIONES DE PANELES EN FUNCION DE LA PANTALLA ---*/
		// w->width, h->height
		final Integer wPVentana, wPSuperior, wPBiblioteca, wPInfo, wPCaratula, wPLista, wPReproduccion, wPBotones, wPI, wPC, wPD, wPEstado, wPActual, wPVolGeneral, wPOpciones, wPVolumen, wPArbol, wPBarraBotones, wBuscar;
		final Integer hPVentana, hPSuperior, hPBiblioteca, hPInfo, hPCaratula, hPLista, hPReproduccion, hPBotones, hPI, hPC, hPD, hPEstado, hPActual, hPVolGeneral, hPOpciones, hPVolumen, hPArbol, hPBarraBotones, hBuscar;
		final String sWPVentana, sWPSuperior, sWPBiblioteca, sWPInfo, sWPCaratula, sWPLista, sWPReproduccion, sWPBotones, sWPI, sWPC, sWPD, sWPEstado, sWPActual, sWPVolGeneral, sWPOpciones, sWPVolumen, sWPArbol, sWPBarraBotones;
		final String sHPVentana, sHPSuperior, sHPBiblioteca, sHPInfo, sHPCaratula, sHPLista, sHPReproduccion, sHPBotones, sHPI, sHPC, sHPD, sHPEstado, sHPActual, sHPVolGeneral, sHPOpciones, sHPVolumen, sHPArbol, sHPBarraBotones;
		Integer wIzq, wCen, wDer, hSup, hCen, hInf, auxI, auxC, auxD; // Auxiliares

		// 0: Panel Ventana
		wPVentana = ancho;
		sWPVentana = wPVentana.toString() + "dlu";

		hPVentana = alto;
		hSup = new Integer((int) (hPVentana * 0.095)); // Panel superior
		hCen = new Integer((int) (hPVentana * 0.72)); // Panel medio
														// (biblioteca)
		hInf = new Integer((int) (hPVentana * 0.18)); // Panel inferior
														// (reproduccion)
		sHPVentana = hSup.toString() + "dlu," + hCen.toString() + "dlu,"
				+ hInf.toString() + "dlu";

		// 1a: Panel Superior
		wPSuperior = wPVentana;
		wIzq = new Integer((int) (wPSuperior * 0.1)); // Menu
		wCen = new Integer((int) (wPSuperior * 0.735)); // Logo
		wDer = new Integer((int) ((wPSuperior * 0.15) / 3)); // Tres botones
		sWPSuperior = wIzq.toString() + "dlu," + wCen.toString() + "dlu,"
				+ wDer.toString() + "dlu," + wDer.toString() + "dlu,"
				+ wDer.toString() + "dlu";

		hPSuperior = hSup;
		sHPSuperior = hPSuperior.toString() + "dlu";

		// 1b: Panel Biblioteca
		wPBiblioteca = wPVentana;
		wIzq = new Integer((int) (wPBiblioteca * 0.2)); // Arbol
		wCen = new Integer((int) (wPBiblioteca * 0.59)); // Lista
		wDer = new Integer((int) (wPBiblioteca * 0.2)); // Info
		sWPBiblioteca = wIzq.toString() + "dlu," + wCen.toString() + "dlu,"
				+ wDer.toString() + "dlu";

		hPBiblioteca = (int) (hCen * 0.985);
		sHPBiblioteca = hPBiblioteca.toString() + "dlu";

		// 1b1: Panel Arbol
		wPArbol = wIzq;
		sWPArbol = wPArbol.toString() + "dlu";

		hPArbol = hPBiblioteca;
		sHPArbol = hPArbol.toString() + "dlu";

		// 1b2: Panel Lista
		wPLista = (int) (wCen * 0.995);
		sWPLista = wPLista.toString() + "dlu";

		hPLista = hPBiblioteca;
		hSup = new Integer((int) (hPLista * 0.91)); // Lista
		hCen = new Integer((int) (hPLista * 0.09)); // BarraBotones
		sHPLista = hSup.toString() + "dlu," + hCen.toString() + "dlu";

		// Barra de botones
		wPBarraBotones = wPLista;
		auxI = new Integer((int) (wPBarraBotones * 0.1));
		sWPBarraBotones = auxI.toString() + "dlu," + auxI.toString() + "dlu,"
				+ auxI.toString() + "dlu," + auxI.toString() + "dlu,"
				+ auxI.toString() + "dlu";

		hPBarraBotones = hCen;
		sHPBarraBotones = hPBarraBotones.toString() + "dlu";

		// 1b3: Panel Info
		wPInfo = wDer;
		sWPInfo = wPInfo.toString() + "dlu";

		hPInfo = hPBiblioteca;
		hSup = new Integer((int) (hPInfo * 0.35)); // Caratula
		hCen = new Integer((int) (hPInfo * 0.565)); // Propiedades
		auxC = new Integer((int) (hPInfo * 0.85)); // Buscar y editar
		hBuscar = new Integer((int) (auxC * 0.1));
		sHPInfo = hSup.toString() + "dlu," + hCen.toString() + "dlu,"
				+ auxI.toString() + "dlu";

		// Panel caratula
		wPCaratula = wPInfo;
		wBuscar = new Integer((int) (wPCaratula * 1.2));
		sWPCaratula = wPCaratula.toString() + "dlu";

		hPCaratula = hSup;
		sHPCaratula = hPCaratula.toString() + "dlu";

		// 1c: Panel Reproduccion
		wPReproduccion = (int) (wPVentana * 0.9);
		wIzq = new Integer((int) (wPReproduccion * 0.35)); // Botones
		wCen = new Integer((int) (wPReproduccion * 0.54)); // Actual
		wPVolGeneral = new Integer((int) ((wPReproduccion * 0.11))); // Volumen
																		// (general)
		sWPReproduccion = wIzq + "dlu," + wCen + "dlu," + wPVolGeneral + "dlu";

		hPReproduccion = (int) (hInf * 0.85);
		sHPReproduccion = hPReproduccion.toString() + "dlu";

		// 1c1: Panel Botones
		wPBotones = wIzq;
		auxI = new Integer((int) (wPBotones * 0.38)); // Panel I
		auxC = new Integer((int) (wPBotones * 0.24)); // Panel C
		auxD = new Integer((int) ((wPBotones * 0.38))); // Panel D
		sWPBotones = auxI.toString() + "dlu," + auxC.toString() + "dlu,"
				+ auxD.toString() + "dlu";

		hPBotones = (int) (hPReproduccion * 0.92);
		sHPBotones = hPBotones.toString() + "dlu";

		// 1c1a: Panel I
		wPI = auxI;
		wIzq = new Integer((int) (wPI * 0.5)); // Boton anterior
		wDer = new Integer((int) (wPI * 0.5)); // Boton retroceder
		sWPI = wIzq.toString() + "dlu," + wDer.toString() + "dlu";

		hPI = hPBotones;
		sHPI = hPI.toString() + "dlu";

		// 1c1b: Panel C
		wPC = auxC;
		sWPC = wPC.toString() + "dlu";

		hPC = hPBotones;
		hSup = new Integer((int) (hPC * 0.6)); // Boton play
		hInf = new Integer((int) (hPC * 0.4)); // Boton stop
		sHPC = hSup.toString() + "dlu," + hInf.toString() + "dlu";

		// 1c1c: Panel D
		wPD = auxD;
		wIzq = new Integer((int) (wPD * 0.5)); // Boton avanzar
		wDer = new Integer((int) (wPD * 0.5)); // Boton siguiente
		sWPD = wIzq.toString() + "dlu," + wDer.toString() + "dlu";

		hPD = hPBotones;
		sHPD = hPD.toString() + "dlu";

		// 1c2: Panel Estado
		wPEstado = (int) (wCen * 0.99);
		sWPEstado = wPEstado.toString() + "dlu";

		hPEstado = hPBotones;
		hSup = new Integer((int) (hPEstado * 0.25)); // Slider
		hCen = new Integer((int) (hPEstado * 0.5)); // Cancion
		hInf = new Integer((int) (hPEstado * 0.3)); // Info. reproduccion
													// (actual)
		sHPEstado = hSup.toString() + "dlu," + hCen.toString() + "dlu,"
				+ hInf.toString() + "dlu";

		// 1c2a: Panel Actual
		wPActual = wCen;
		wIzq = new Integer((int) (wPActual * 0.3)); // Slider
		wCen = new Integer((int) (wPActual * 0.4)); // Cancion
		wDer = new Integer((int) (wPActual * 0.3)); // Info. reproduccion
													// (actual)
		sWPActual = wIzq.toString() + "dlu," + wCen.toString() + "dlu,"
				+ wDer.toString() + "dlu";

		hPActual = hInf;
		sHPActual = hPActual.toString() + "dlu";

		// 1c3: Panel volumen general (wPVolGeneral ya calculado)
		wIzq = new Integer((int) (wPVolGeneral * 0.5)); // Opciones
		wDer = new Integer((int) (wPVolGeneral * 0.5)); // Barra volumen
		sWPVolGeneral = wIzq.toString() + "dlu," + wDer.toString() + "dlu";

		hPVolGeneral = hPBotones;
		sHPVolGeneral = hPVolGeneral.toString() + "dlu";

		// 1c3a: Panel opciones
		wPOpciones = wIzq;
		sWPOpciones = wPOpciones.toString() + "dlu";

		hPOpciones = hPBotones;
		hSup = new Integer((int) (hPOpciones * 0.3)); // Repetir
		hCen = new Integer((int) (hPOpciones * 0.3)); // Aleatorio
		hInf = new Integer((int) (hPOpciones * 0.4)); // Boton volumen
		sHPOpciones = hSup.toString() + "dlu," + hCen.toString() + "dlu,"
				+ hInf.toString() + "dlu";

		// 1c3b: Panel volumen (barra)
		wPVolumen = wDer;
		sWPVolumen = wPVolumen.toString() + "dlu";

		hPVolumen = hPVolGeneral;
		sHPVolumen = hPVolumen.toString() + "dlu";

		// ------------------------- Vista -------------------------
		// ======== ventana ========
		{
			ventana.setUndecorated(true); // Quita los botones del borde
			ventana.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
			ventana.setAlwaysOnTop(false);
			ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			Image icono = Toolkit.getDefaultToolkit().getImage(
					FormPrincipal.class.getClassLoader().getResource(
							"img/iconoX_16x16.png"));
			ventana.setIconImage(icono);
			ventana.setTitle("XtremeAudio");
			Container ventanaContentPane = ventana.getContentPane();
			ventanaContentPane.setBackground(Color.black);
			ventanaContentPane.setLayout(new FormLayout(ancho.toString()
					+ "dlu", alto.toString() + "dlu"));

			// ======== panelVentana ========
			{
				MoverPanelListener mml = new MoverPanelListener(panelVentana);
				panelVentana.addMouseListener(mml);
				panelVentana.addMouseMotionListener(mml);
				panelVentana
						.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
				panelVentana.setBackground(Color.black);
				panelVentana.setLayout(new FormLayout(sWPVentana, sHPVentana));

				// ======== panelSuperior ========
				{
					panelSuperior.setBackground(color);
					panelSuperior
							.setBorder(new LineBorder(colorBorde, 2, true));
					panelSuperior
							.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
					panelSuperior.setLayout(new FormLayout(sWPSuperior,
							sHPSuperior));

					// ======== barraMenu ========
					{
						barraMenu
								.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
						barraMenu.setBorderPainted(false);

						// ======== menu ========
						{
							menu.setText("MEN\u00da      ");
							menu.setIcon(new ImageIcon(FormPrincipal.class
									.getClassLoader().getResource(
											"img/iconoX_27x27.png")));
							menu.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							menu.setCursor(Cursor
									.getPredefinedCursor(Cursor.HAND_CURSOR));
							menu.setFont(menu.getFont().deriveFont(
									menu.getFont().getStyle() | Font.BOLD,
									menu.getFont().getSize() + 4f));
							menu.setActionCommand("menu");
							menu.setBorderPainted(false);
							menu.setMnemonic('M');

							// ======== menuBiblioteca ========
							{
								menuBiblioteca.setText("Biblioteca");
								menuBiblioteca
										.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
								menuBiblioteca
										.setFont(menuBiblioteca
												.getFont()
												.deriveFont(
														menuBiblioteca
																.getFont()
																.getStyle()
																| Font.BOLD,
														menuBiblioteca
																.getFont()
																.getSize() + 2f));
								menuBiblioteca
										.setCursor(Cursor
												.getPredefinedCursor(Cursor.HAND_CURSOR));
								menuBiblioteca.setMnemonic('B');
								menuBiblioteca.setBorderPainted(false);

								// ---- menuItemImportarArchivo ----
								menuItemImportarArchivos
										.setText("Importar archivos...");
								menuItemImportarArchivos
										.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
								menuItemImportarArchivos
										.setFont(menuItemImportarArchivos
												.getFont()
												.deriveFont(
														menuItemImportarArchivos
																.getFont()
																.getStyle()
																| Font.BOLD,
														menuItemImportarArchivos
																.getFont()
																.getSize() + 1f));
								menuItemImportarArchivos
										.setCursor(Cursor
												.getPredefinedCursor(Cursor.HAND_CURSOR));
								menuItemImportarArchivos
										.setDisplayedMnemonicIndex(0);
								menuItemImportarArchivos
										.setAccelerator(KeyStroke.getKeyStroke(
												KeyEvent.VK_A,
												KeyEvent.CTRL_MASK));
								menuItemImportarArchivos.setMnemonic('A');
								menuItemImportarArchivos
										.setBorderPainted(false);
								menuItemImportarArchivos
										.setIcon(new ImageIcon(
												FormPrincipal.class
														.getClassLoader()
														.getResource(
																"img/anyadir_16x16.png")));
								menuItemImportarArchivos
										.addActionListener(new ActionListener() {
											public void actionPerformed(
													ActionEvent e) {
												menuItemImportarArchivosActionPerformed(e);
											}
										});
								menuBiblioteca.add(menuItemImportarArchivos);

								// ---- menuItemImportarCarpeta ----
								menuItemImportarCarpeta
										.setText("Importar carpeta...");
								menuItemImportarCarpeta
										.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
								menuItemImportarCarpeta
										.setFont(menuItemImportarCarpeta
												.getFont()
												.deriveFont(
														menuItemImportarCarpeta
																.getFont()
																.getStyle()
																| Font.BOLD,
														menuItemImportarCarpeta
																.getFont()
																.getSize() + 1f));
								menuItemImportarCarpeta
										.setCursor(Cursor
												.getPredefinedCursor(Cursor.HAND_CURSOR));
								menuItemImportarCarpeta
										.setDisplayedMnemonicIndex(0);
								menuItemImportarCarpeta
										.setAccelerator(KeyStroke.getKeyStroke(
												KeyEvent.VK_C,
												KeyEvent.CTRL_MASK));
								menuItemImportarCarpeta.setMnemonic('C');
								menuItemImportarCarpeta.setBorderPainted(false);
								menuItemImportarCarpeta
										.setIcon(new ImageIcon(
												FormPrincipal.class
														.getClassLoader()
														.getResource(
																"img/anyadir_16x16.png")));
								menuItemImportarCarpeta
										.addActionListener(new ActionListener() {
											public void actionPerformed(
													ActionEvent e) {
												menuItemImportarCarpetaActionPerformed(e);
											}
										});
								menuBiblioteca.add(menuItemImportarCarpeta);
								
								menuBiblioteca.add(new JSeparator());

								//---- Crear lista ----
								menuItemCrearLista.setText("Crear lista...");
								menuItemCrearLista
										.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
								menuItemCrearLista
										.setFont(menuItemCrearLista
												.getFont()
												.deriveFont(
														menuItemCrearLista
																.getFont()
																.getStyle()
																| Font.BOLD,
														menuItemCrearLista
																.getFont()
																.getSize() + 1f));
								menuItemCrearLista
										.setCursor(Cursor
												.getPredefinedCursor(Cursor.HAND_CURSOR));
								menuItemCrearLista.setDisplayedMnemonicIndex(0);
								menuItemCrearLista.setAccelerator(KeyStroke
										.getKeyStroke(KeyEvent.VK_C,
												KeyEvent.CTRL_MASK));
								menuItemCrearLista.setMnemonic('C');
								menuItemCrearLista.setBorderPainted(false);
								menuItemCrearLista
										.setIcon(new ImageIcon(
												FormPrincipal.class
														.getClassLoader()
														.getResource(
																"img/abrir_16x16.png")));
								menuItemCrearLista
										.addActionListener(new ActionListener() {
											public void actionPerformed(
													ActionEvent e) {
												menuItemCrearListaActionPerformed(e);
											}
										});
								menuBiblioteca.add(menuItemCrearLista);

								
								// ---- menuItemAbrirLista ----
								menuItemAbrirLista.setText("Abrir lista...");
								menuItemAbrirLista
										.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
								menuItemAbrirLista
										.setFont(menuItemAbrirLista
												.getFont()
												.deriveFont(
														menuItemAbrirLista
																.getFont()
																.getStyle()
																| Font.BOLD,
														menuItemAbrirLista
																.getFont()
																.getSize() + 1f));
								menuItemAbrirLista
										.setCursor(Cursor
												.getPredefinedCursor(Cursor.HAND_CURSOR));
								menuItemAbrirLista.setDisplayedMnemonicIndex(0);
								menuItemAbrirLista.setAccelerator(KeyStroke
										.getKeyStroke(KeyEvent.VK_B,
												KeyEvent.CTRL_MASK));
								menuItemAbrirLista.setMnemonic('B');
								menuItemAbrirLista.setBorderPainted(false);
								menuItemAbrirLista
										.setIcon(new ImageIcon(
												FormPrincipal.class
														.getClassLoader()
														.getResource(
																"img/abrir_16x16.png")));
								menuItemAbrirLista
										.addActionListener(new ActionListener() {
											public void actionPerformed(
													ActionEvent e) {
												menuItemAbrirListaActionPerformed(e);
											}
										});
								menuBiblioteca.add(menuItemAbrirLista);

								menuBiblioteca.add(new JSeparator());

								// ---- menuItemGuardar ----
								menuItemGuardar.setText("Guardar");
								menuItemGuardar
										.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
								menuItemGuardar
										.setFont(menuItemGuardar
												.getFont()
												.deriveFont(
														menuItemGuardar
																.getFont()
																.getStyle()
																| Font.BOLD,
														menuItemGuardar
																.getFont()
																.getSize() + 1f));
								menuItemGuardar
										.setCursor(Cursor
												.getPredefinedCursor(Cursor.HAND_CURSOR));
								menuItemGuardar.setDisplayedMnemonicIndex(0);
								menuItemGuardar.setAccelerator(KeyStroke
										.getKeyStroke(KeyEvent.VK_S,
												KeyEvent.CTRL_MASK));
								menuItemGuardar.setMnemonic('L');
								menuItemGuardar.setBorderPainted(false);
								menuItemGuardar
										.setIcon(new ImageIcon(
												FormPrincipal.class
														.getClassLoader()
														.getResource(
																"img/guardar_16x16.png")));
								// menuItemGuardar.setEnabled(false);
								menuItemGuardar
										.addActionListener(new ActionListener() {
											public void actionPerformed(
													ActionEvent e) {
												menuItemGuardarListaActionPerformed(e);
											}
										});
								menuBiblioteca.add(menuItemGuardar);

								// ---- menuItemGuardarListaComo ----
								menuItemGuardarListaComo
										.setText("Guardar lista como...");
								menuItemGuardarListaComo
										.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
								menuItemGuardarListaComo
										.setFont(menuItemGuardarListaComo
												.getFont()
												.deriveFont(
														menuItemGuardarListaComo
																.getFont()
																.getStyle()
																| Font.BOLD,
														menuItemGuardarListaComo
																.getFont()
																.getSize() + 1f));
								menuItemGuardarListaComo
										.setCursor(Cursor
												.getPredefinedCursor(Cursor.HAND_CURSOR));
								menuItemGuardarListaComo
										.setDisplayedMnemonicIndex(0);
								menuItemGuardarListaComo
										.setAccelerator(KeyStroke.getKeyStroke(
												KeyEvent.VK_G,
												KeyEvent.CTRL_MASK));
								menuItemGuardarListaComo.setMnemonic('G');
								menuItemGuardarListaComo
										.setBorderPainted(false);
								menuItemGuardarListaComo
										.setIcon(new ImageIcon(
												FormPrincipal.class
														.getClassLoader()
														.getResource(
																"img/guardar_16x16.png")));
								menuItemGuardarListaComo
										.addActionListener(new ActionListener() {
											public void actionPerformed(
													ActionEvent e) {
												menuItemGuardarListaComoActionPerformed(e);
											}
										});
								menuBiblioteca.add(menuItemGuardarListaComo);
							}
							menu.add(menuBiblioteca);

							// ======== menuReproduccion ========
							{
								menuReproduccion.setText("Reproducci\u00f3n");
								menuReproduccion
										.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
								menuReproduccion
										.setCursor(Cursor
												.getPredefinedCursor(Cursor.HAND_CURSOR));
								menuReproduccion
										.setFont(menuReproduccion
												.getFont()
												.deriveFont(
														menuReproduccion
																.getFont()
																.getStyle()
																| Font.BOLD,
														menuReproduccion
																.getFont()
																.getSize() + 2f));
								menuReproduccion.setBorderPainted(false);
								menuReproduccion.setMnemonic('R');

								// ---- menuItemPlay ----
								menuItemPlay.setText("Play/Pausa");
								menuItemPlay.setAccelerator(KeyStroke
										.getKeyStroke(KeyEvent.VK_ENTER,
												KeyEvent.ALT_DOWN_MASK));
								menuItemPlay.setBorderPainted(false);
								menuItemPlay
										.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
								menuItemPlay
										.setCursor(Cursor
												.getPredefinedCursor(Cursor.HAND_CURSOR));
								menuItemPlay.setForeground(Color.gray);
								menuItemPlay
										.setFont(menuItemPlay
												.getFont()
												.deriveFont(
														menuItemPlay.getFont()
																.getStyle()
																| Font.BOLD,
														menuItemPlay.getFont()
																.getSize() + 1f));
								menuItemPlay.setMargin(new Insets(0, 0, 0, 0));
								menuItemPlay.setMnemonic('P');
								menuItemPlay
										.setIcon(new ImageIcon(
												FormPrincipal.class
														.getClassLoader()
														.getResource(
																"img/playPause_16x16gris.png")));
								menuItemPlay
										.addActionListener(new ActionListener() {
											public void actionPerformed(
													ActionEvent e) {
												menuItemPlayActionPerformed(e);
											}
										});
								menuReproduccion.add(menuItemPlay);

								// ---- menuItemStop ----
								menuItemStop
										.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
								menuItemStop.setForeground(Color.gray);
								menuItemStop
										.setFont(menuItemStop
												.getFont()
												.deriveFont(
														menuItemStop.getFont()
																.getStyle()
																| Font.BOLD,
														menuItemStop.getFont()
																.getSize() + 1f));
								menuItemStop.setText("Stop");
								menuItemStop.setAccelerator(KeyStroke
										.getKeyStroke(KeyEvent.VK_C,
												KeyEvent.ALT_DOWN_MASK));
								menuItemStop
										.setCursor(Cursor
												.getPredefinedCursor(Cursor.HAND_CURSOR));
								menuItemStop
										.setIcon(new ImageIcon(
												FormPrincipal.class
														.getClassLoader()
														.getResource(
																"img/stop_16x16gris.png")));
								menuItemStop
										.addActionListener(new ActionListener() {
											public void actionPerformed(
													ActionEvent e) {
												menuItemStopActionPerformed(e);
											}
										});
								menuReproduccion.add(menuItemStop);

								// ---- menuItemRetroceder ----
								menuItemRetroceder
										.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
								menuItemRetroceder.setForeground(Color.gray);
								menuItemRetroceder
										.setFont(menuItemRetroceder
												.getFont()
												.deriveFont(
														menuItemRetroceder
																.getFont()
																.getStyle()
																| Font.BOLD,
														menuItemRetroceder
																.getFont()
																.getSize() + 1f));
								menuItemRetroceder.setAccelerator(KeyStroke
										.getKeyStroke(KeyEvent.VK_X,
												KeyEvent.ALT_DOWN_MASK));
								menuItemRetroceder.setText("Retroceder");
								menuItemRetroceder
										.setCursor(Cursor
												.getPredefinedCursor(Cursor.HAND_CURSOR));
								menuItemRetroceder
										.setIcon(new ImageIcon(
												FormPrincipal.class
														.getClassLoader()
														.getResource(
																"img/retroceder_16x16gris.png")));
								menuItemRetroceder
										.addActionListener(new ActionListener() {
											public void actionPerformed(
													ActionEvent e) {
												menuItemRetrocederActionPerformed(e);
											}
										});
								menuReproduccion.add(menuItemRetroceder);

								// ---- menuItemAvanzar ----
								menuItemAvanzar
										.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
								menuItemAvanzar.setForeground(Color.gray);
								menuItemAvanzar
										.setFont(menuItemAvanzar
												.getFont()
												.deriveFont(
														menuItemAvanzar
																.getFont()
																.getStyle()
																| Font.BOLD,
														menuItemAvanzar
																.getFont()
																.getSize() + 1f));
								menuItemAvanzar.setAccelerator(KeyStroke
										.getKeyStroke(KeyEvent.VK_V,
												KeyEvent.ALT_DOWN_MASK));
								menuItemAvanzar.setText("Avanzar");
								menuItemAvanzar
										.setCursor(Cursor
												.getPredefinedCursor(Cursor.HAND_CURSOR));
								menuItemAvanzar
										.setIcon(new ImageIcon(
												FormPrincipal.class
														.getClassLoader()
														.getResource(
																"img/avanzar_16x16gris.png")));
								menuItemAvanzar
										.addActionListener(new ActionListener() {
											public void actionPerformed(
													ActionEvent e) {
												menuItemAvanzarActionPerformed(e);
											}
										});
								menuReproduccion.add(menuItemAvanzar);

								// ---- menuItemAnterior ----
								menuItemAnterior
										.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
								menuItemAnterior.setForeground(Color.gray);
								menuItemAnterior
										.setFont(menuItemAnterior
												.getFont()
												.deriveFont(
														menuItemAnterior
																.getFont()
																.getStyle()
																| Font.BOLD,
														menuItemAnterior
																.getFont()
																.getSize() + 1f));
								menuItemAnterior.setAccelerator(KeyStroke
										.getKeyStroke(KeyEvent.VK_Z,
												KeyEvent.ALT_DOWN_MASK));
								menuItemAnterior.setText("Anterior");
								menuItemAnterior
										.setCursor(Cursor
												.getPredefinedCursor(Cursor.HAND_CURSOR));
								menuItemAnterior
										.setIcon(new ImageIcon(
												FormPrincipal.class
														.getClassLoader()
														.getResource(
																"img/anterior_16x16gris.png")));
								menuItemAnterior
										.addActionListener(new ActionListener() {
											public void actionPerformed(
													ActionEvent e) {
												menuItemAnteriorActionPerformed(e);
											}
										});
								menuReproduccion.add(menuItemAnterior);

								// ---- menuItemSiguiente ----
								menuItemSiguiente
										.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
								menuItemSiguiente.setForeground(Color.gray);
								menuItemSiguiente
										.setFont(menuItemSiguiente
												.getFont()
												.deriveFont(
														menuItemSiguiente
																.getFont()
																.getStyle()
																| Font.BOLD,
														menuItemSiguiente
																.getFont()
																.getSize() + 1f));
								menuItemSiguiente.setAccelerator(KeyStroke
										.getKeyStroke(KeyEvent.VK_B,
												KeyEvent.ALT_DOWN_MASK));
								menuItemSiguiente.setText("Siguiente");
								menuItemSiguiente
										.setCursor(Cursor
												.getPredefinedCursor(Cursor.HAND_CURSOR));
								menuItemSiguiente
										.setIcon(new ImageIcon(
												FormPrincipal.class
														.getClassLoader()
														.getResource(
																"img/siguiente_16x16gris.png")));
								menuItemSiguiente
										.addActionListener(new ActionListener() {
											public void actionPerformed(
													ActionEvent e) {
												menuItemSiguienteActionPerformed(e);
											}
										});
								menuReproduccion.add(menuItemSiguiente);
							}
							menu.add(menuReproduccion);
							
							menu.add(new JSeparator());

							// ---- menuItemAyuda ----
							menuItemAyuda.setText("Ayuda");
							menuItemAyuda.setCursor(Cursor
									.getPredefinedCursor(Cursor.HAND_CURSOR));
							menuItemAyuda
									.setFont(menuItemAyuda.getFont()
											.deriveFont(
													menuItemAyuda.getFont()
															.getStyle()
															| Font.BOLD,
													menuItemAyuda.getFont()
															.getSize() + 2f));
							menuItemAyuda.setMnemonic('A');
							menuItemAyuda.setAccelerator(KeyStroke
									.getKeyStroke(KeyEvent.VK_H,
											KeyEvent.CTRL_MASK));
							menuItemAyuda
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							menuItemAyuda
									.setIcon(new ImageIcon(FormPrincipal.class
											.getClassLoader().getResource(
													"img/ayuda_16x16.png")));
							menuItemAyuda
									.setHorizontalAlignment(SwingConstants.LEFT);
							menuItemAyuda
									.addActionListener(new ActionListener() {
										public void actionPerformed(
												ActionEvent e) {
											menuItemAyudaActionPerformed(e);
										}
									});
							menu.add(menuItemAyuda);

							// ---- menuItemSalir ----
							menuItemSalir.setText("Salir");
							menuItemSalir
									.setFont(menuItemSalir.getFont()
											.deriveFont(
													menuItemSalir.getFont()
															.getStyle()
															| Font.BOLD,
													menuItemSalir.getFont()
															.getSize() + 2f));
							menuItemSalir.setBorderPainted(false);
							menuItemSalir
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							menuItemSalir.setMnemonic('S');
							menuItemSalir.setAccelerator(KeyStroke
									.getKeyStroke(KeyEvent.VK_F4,
											KeyEvent.ALT_MASK));
							menuItemSalir.setCursor(Cursor
									.getPredefinedCursor(Cursor.HAND_CURSOR));
							menuItemSalir
									.setIcon(new ImageIcon(FormPrincipal.class
											.getClassLoader().getResource(
													"img/cerrar_16x16.png")));
							menuItemSalir
									.addActionListener(new ActionListener() {
										public void actionPerformed(
												ActionEvent e) {
											menuItemSalirActionPerformed(e);
										}
									});
							menu.add(menuItemSalir);
						}
						barraMenu.add(menu);
					}
					panelSuperior.add(barraMenu, new CellConstraints(1, 1, 1,
							1, CellConstraints.FILL, CellConstraints.TOP,
							new Insets(15, 8, 0, 0)));

					// ---- labelTitulo ----
					labelTitulo.setIcon(new ImageIcon(FormPrincipal.class
							.getClassLoader()
							.getResource("img/logo_313x50.png")));
					labelTitulo
							.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
					labelTitulo.setFocusable(false);
					panelSuperior.add(labelTitulo, new CellConstraints(2, 1, 1,
							1, CellConstraints.CENTER, CellConstraints.TOP,
							new Insets(5, 0, 0, 0)));

					// ---- botonAyuda ----
					botonAyuda.setIcon(new ImageIcon(FormPrincipal.class
							.getClassLoader()
							.getResource("img/ayuda_45x45.png")));
					botonAyuda.setCursor(Cursor
							.getPredefinedCursor(Cursor.HAND_CURSOR));
					botonAyuda.setBackground(Color.black);
					botonAyuda.setToolTipText("Ayuda");
					botonAyuda.setFocusable(false);
					botonAyuda
							.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
					botonAyuda.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent e) {
							botonAyudaActionPerformed(e);
						}
					});
					panelSuperior.add(botonAyuda, new CellConstraints(3, 1, 1,
							1, CellConstraints.CENTER, CellConstraints.TOP,
							new Insets(4, 0, 0, 0)));

					// ---- botonMinimizar ----
					botonMinimizar.setIcon(new ImageIcon(FormPrincipal.class
							.getClassLoader().getResource(
									"img/minimizar_45x45.png")));
					botonMinimizar.setCursor(Cursor
							.getPredefinedCursor(Cursor.HAND_CURSOR));
					botonMinimizar.setBackground(Color.black);
					botonMinimizar.setToolTipText("Minimizar");
					botonMinimizar.setFocusable(false);
					botonMinimizar
							.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
					botonMinimizar.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent e) {
							botonMinimizarActionPerformed(e);
						}
					});
					panelSuperior.add(botonMinimizar, new CellConstraints(4, 1,
							1, 1, CellConstraints.CENTER, CellConstraints.TOP,
							new Insets(4, 0, 0, 0)));

					// ---- botonSalir ----
					botonSalir.setIcon(new ImageIcon(FormPrincipal.class
							.getClassLoader().getResource(
									"img/cerrar_45x45.png")));
					botonSalir.setCursor(Cursor
							.getPredefinedCursor(Cursor.HAND_CURSOR));
					botonSalir.setBackground(Color.black);
					botonSalir.setToolTipText("Salir");
					botonSalir.setFocusable(false);
					botonSalir
							.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
					botonSalir.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent e) {
							botonSalirActionPerformed(e);
						}
					});
					panelSuperior.add(botonSalir, new CellConstraints(5, 1, 1,
							1, CellConstraints.CENTER, CellConstraints.TOP,
							new Insets(4, 0, 0, 0)));
				}
				panelVentana.add(panelSuperior, new CellConstraints(1, 1, 1, 1,
						CellConstraints.FILL, CellConstraints.FILL, new Insets(
								3, 5, 3, 5)));

				// ======== panelBiblioteca ========
				{
					panelBiblioteca.setBackground(Color.black);
					panelBiblioteca.setBorder(new LineBorder(colorBorde, 2,
							true));
					panelBiblioteca.setLayout(new FormLayout(sWPBiblioteca,
							sHPBiblioteca));

					// ======== panelArbol ========
					{
						panelArbol.setBorder(null);
						panelArbol.setBackground(Color.black);
						panelArbol
								.setLayout(new FormLayout(sWPArbol, sHPArbol));

						// ======= Arbol =======
						{
							arbolBiblioteca.setBackground(new Color(240, 240,
									240));
							arbolBiblioteca.setForeground(color);
							arbolBiblioteca.setBorder(null);
							arbolBiblioteca
									.getSelectionModel()
									.setSelectionMode(
											TreeSelectionModel.SINGLE_TREE_SELECTION);
							arbolBiblioteca.setFocusable(false);
							arbolBiblioteca
									.addTreeSelectionListener(new TreeSelectionListener() {
										@Override
										public void valueChanged(
												TreeSelectionEvent e) {
											DefaultMutableTreeNode nodo = (DefaultMutableTreeNode) arbolBiblioteca
													.getLastSelectedPathComponent();
											if (nodo != null) {
												NodoArbol n = (NodoArbol) nodo
														.getUserObject();
												Controlador.cambiaLista(n.getIdLista(),n.getNombre());
											}
										}
									});
							
							ImageIcon iconoHoja = new ImageIcon(
									FormPrincipal.class
											.getClassLoader()
											.getResource("img/iconoX_27x27.png"));
							ImageIcon iconoAbierto = new ImageIcon(
									FormPrincipal.class
											.getClassLoader()
											.getResource("img/carpetaAbierta_27x27.png"));
							ImageIcon iconoCerrado = new ImageIcon(
									FormPrincipal.class
											.getClassLoader()
											.getResource("img/carpetaCerrada_27x27.png"));
							if ((iconoHoja != null) && (iconoAbierto != null) && (iconoCerrado != null)) {
								DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
								renderer.setLeafIcon(iconoHoja);
								renderer.setClosedIcon(iconoCerrado);
								renderer.setOpenIcon(iconoAbierto);
								arbolBiblioteca.setCellRenderer(renderer);
							}

						}

						// scrollPaneArbol
						scrollPaneArbol.setBorder(null);
						scrollPaneArbol
								.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
						scrollPaneArbol
								.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
						scrollPaneArbol
								.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
						scrollPaneArbol.setViewportBorder(null);
						scrollPaneArbol.setWheelScrollingEnabled(true);
						scrollPaneArbol.setViewportView(arbolBiblioteca);

						panelArbol.add(scrollPaneArbol, new CellConstraints(1,
								1, 1, 1, CellConstraints.FILL,
								CellConstraints.FILL));
					}
					panelBiblioteca.add(panelArbol, new CellConstraints(1, 1,
							1, 1, CellConstraints.FILL, CellConstraints.FILL));

					// ======== panelLista ========
					{
						panelLista.setBorder(null);
						panelLista.setBackground(Color.black);
						panelLista
								.setLayout(new FormLayout(sWPLista, sHPLista));

						// ======== scrollPaneLista ========
						{
							scrollPaneLista.setBorder(null);
							scrollPaneLista
									.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
							scrollPaneLista
									.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
							scrollPaneLista
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							scrollPaneLista.setViewportBorder(null);
							scrollPaneLista.setWheelScrollingEnabled(true);

							// ---- tablaLista ----
							tablaLista.setModel(new DefaultTableModel(
									new Object[][] {}, new String[] { "Actual",
											"T\u00edtulo", "Int\u00e9rprete",
											"\u00c1lbum", "Duraci\u00f3n" }) {
								private static final long serialVersionUID = 1L;
								Class<?>[] columnTypes = new Class<?>[] {
										ImageIcon.class, String.class,
										String.class, String.class,
										String.class };
								boolean[] columnEditable = new boolean[] {
										false, false, false, false, false };

								@Override
								public Class<?> getColumnClass(int columnIndex) {
									return columnTypes[columnIndex];
								}

								@Override
								public boolean isCellEditable(int rowIndex,
										int columnIndex) {
									return columnEditable[columnIndex];
								}
							});
							{
								TableColumnModel cm = tablaLista
										.getColumnModel();
								cm.getColumn(0).setResizable(false);
								cm.getColumn(1).setMinWidth(
										(int) (wPLista * 0.41));
								cm.getColumn(2).setMinWidth(
										(int) (wPLista * 0.41));
								cm.getColumn(3).setMinWidth(
										(int) (wPLista * 0.41));
								cm.getColumn(4).setMinWidth(
										(int) (wPLista * 0.407));
								cm.getColumn(0).setPreferredWidth(
										(int) (wPLista * 0.11));
								cm.getColumn(1).setPreferredWidth(
										(int) (wPLista * 0.41));
								cm.getColumn(2).setPreferredWidth(
										(int) (wPLista * 0.41));
								cm.getColumn(3).setPreferredWidth(
										(int) (wPLista * 0.41));
								cm.getColumn(4).setPreferredWidth(
										(int) (wPLista * 0.407));
							}

							tablaLista
									.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
							tablaLista.setBorder(null);
							tablaLista.setFocusable(false);
							tablaLista
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							tablaLista.setSelectionBackground(colorBorde);
							tablaLista.setSelectionForeground(Color.black);
							tablaLista
									.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
							tablaLista.setFillsViewportHeight(true);
							tablaLista.setShowHorizontalLines(false);
							tablaLista.setShowVerticalLines(false);
							tablaLista.getTableHeader().setReorderingAllowed(
									false);
							scrollPaneLista.setViewportView(tablaLista);
							tablaLista.getSelectedRow();
							tablaLista.addMouseListener(new MouseAdapter() {

								public void mouseClicked(MouseEvent e) {
									if (e.getClickCount() == 2) {
										dobleClickTablaActionPerformed(e);
									}
								}

							});
						}
						panelLista
								.add(scrollPaneLista, new CellConstraints(1, 1,
										1, 1, CellConstraints.FILL,
										CellConstraints.FILL, new Insets(-2,
												-2, 0, 0)));

						// ====== Barra de botones =======
						{
							panelBarraBotones.setBackground(Color.black);
							panelBarraBotones.setBorder(null);
							panelBarraBotones.setLayout(new FormLayout(
									sWPBarraBotones, sHPBarraBotones));

							// ---- botonAnyadir ----
							botonAnyadir.setIcon(new ImageIcon(
									FormPrincipal.class.getClassLoader()
											.getResource(
													"img/anyadir_35x35.png")));
							botonAnyadir.setCursor(Cursor
									.getPredefinedCursor(Cursor.HAND_CURSOR));
							botonAnyadir.setBackground(Color.black);
							botonAnyadir.setToolTipText("A\u00f1adir");
							botonAnyadir.setFocusable(false);
							botonAnyadir
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							botonAnyadir
									.addActionListener(new ActionListener() {
										public void actionPerformed(
												ActionEvent e) {
											botonAnyadirActionPerformed(e);
										}
									});
							panelBarraBotones.add(botonAnyadir,
									new CellConstraints(1, 1, 1, 1,
											CellConstraints.CENTER,
											CellConstraints.TOP));

							// ---- botonEliminar----
							botonEliminar.setIcon(new ImageIcon(
									FormPrincipal.class.getClassLoader()
											.getResource(
													"img/eliminar_35x35.png")));
							botonEliminar.setCursor(Cursor
									.getPredefinedCursor(Cursor.HAND_CURSOR));
							botonEliminar.setBackground(Color.black);
							botonEliminar.setToolTipText("Eliminar");
							botonEliminar.setFocusable(false);
							botonEliminar
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							botonEliminar
									.addActionListener(new ActionListener() {
										public void actionPerformed(
												ActionEvent e) {
											botonEliminarActionPerformed(e);
										}
									});
							panelBarraBotones.add(botonEliminar,
									new CellConstraints(2, 1, 1, 1,
											CellConstraints.CENTER,
											CellConstraints.TOP));

							// ---- botonLimpiar ----
							botonLimpiar.setIcon(new ImageIcon(
									FormPrincipal.class.getClassLoader()
											.getResource(
													"img/limpiar_35x35.png")));
							botonLimpiar.setCursor(Cursor
									.getPredefinedCursor(Cursor.HAND_CURSOR));
							botonLimpiar.setBackground(Color.black);
							botonLimpiar.setToolTipText("Limpiar");
							botonLimpiar.setFocusable(false);
							botonLimpiar
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							botonLimpiar
									.addActionListener(new ActionListener() {
										public void actionPerformed(
												ActionEvent e) {
											botonLimpiarActionPerformed(e);
										}
									});
							panelBarraBotones.add(botonLimpiar,
									new CellConstraints(3, 1, 1, 1,
											CellConstraints.CENTER,
											CellConstraints.TOP));

							// ---- botonAbrir ----
							botonAbrir
									.setIcon(new ImageIcon(FormPrincipal.class
											.getClassLoader().getResource(
													"img/abrir_35x35.png")));
							botonAbrir.setCursor(Cursor
									.getPredefinedCursor(Cursor.HAND_CURSOR));
							botonAbrir.setBackground(Color.black);
							botonAbrir.setToolTipText("Abrir");
							botonAbrir.setFocusable(false);
							botonAbrir
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							botonAbrir.addActionListener(new ActionListener() {
								public void actionPerformed(ActionEvent e) {
									botonAbrirActionPerformed(e);
								}
							});
							panelBarraBotones.add(botonAbrir,
									new CellConstraints(4, 1, 1, 1,
											CellConstraints.CENTER,
											CellConstraints.TOP));

							// ---- botonGuardar ----
							botonGuardar.setIcon(new ImageIcon(
									FormPrincipal.class.getClassLoader()
											.getResource(
													"img/guardar_35x35.png")));
							botonGuardar.setCursor(Cursor
									.getPredefinedCursor(Cursor.HAND_CURSOR));
							botonGuardar.setBackground(Color.black);
							botonGuardar.setToolTipText("Guardar");
							botonGuardar.setFocusable(false);
							botonGuardar
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							botonGuardar
									.addActionListener(new ActionListener() {
										public void actionPerformed(
												ActionEvent e) {
											botonGuardarActionPerformed(e);
										}
									});
							panelBarraBotones.add(botonGuardar,
									new CellConstraints(5, 1, 1, 1,
											CellConstraints.CENTER,
											CellConstraints.TOP));
						}
						panelLista.add(panelBarraBotones, new CellConstraints(
								1, 2, 1, 1, CellConstraints.CENTER,
								CellConstraints.CENTER));
					}
					panelBiblioteca.add(panelLista, new CellConstraints(2, 1,
							1, 1, CellConstraints.FILL, CellConstraints.FILL,
							new Insets(3, 3, 1, 3)));

					// ======== panelInfo ========
					{
						panelInfo.setBorder(null);
						panelInfo.setBackground(Color.black);
						panelInfo.setLayout(new FormLayout(sWPInfo, sHPInfo));

						// --- panelCaratula ---
						panelCaratula
								.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
						panelCaratula.setLayout(new FormLayout(sWPCaratula,
								sHPCaratula));

						// ---- labelCaratula ----
						labelCaratula.setIconTextGap(0);
						labelCaratula.setIcon(new ImageIcon(FormPrincipal.class
								.getClassLoader().getResource(
										"img/desconocido_123x127.png")));
						labelCaratula
								.setHorizontalTextPosition(SwingConstants.CENTER);
						labelCaratula
								.setHorizontalAlignment(SwingConstants.CENTER);
						labelCaratula.setFocusable(false);

						panelCaratula.add(labelCaratula, new CellConstraints(1,
								1, 1, 1, CellConstraints.FILL,
								CellConstraints.FILL, new Insets(2, 3, 0, 0)));

						panelInfo.add(panelCaratula, new CellConstraints(1, 1,
								1, 1, CellConstraints.FILL,
								CellConstraints.FILL));

						// ======== scrollPaneInfo ========
						{
							scrollPaneInfo.setBorder(null);
							scrollPaneInfo
									.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
							scrollPaneInfo
									.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
							scrollPaneInfo
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							scrollPaneInfo.setViewportBorder(null);
							scrollPaneInfo.setWheelScrollingEnabled(true);

							// ---- tablaInfo ----
							tablaInfo
									.setModel(new DefaultTableModel(
											new String[][] {
													{ "Int\u00e9rprete", "" },
													{ "\u00c1lbum", "" },
													{ "T\u00edtulo", "" },
													{ "G\u00e9nero", "" },
													{ "A\u00f1o", "" },
													{ "Pista", "" },
													{ "Duraci\u00f3n", "" },
													{ "Formato", "" },
													{ "Path", "" } },
											new String[] { "Etiqueta", "Valor" }) {
										private static final long serialVersionUID = 1L;
										Class<?>[] columnTypes = new Class<?>[] {
												String.class, String.class };
										boolean[] columnEditable = new boolean[] {
												false, false };

										@Override
										public Class<?> getColumnClass(
												int columnIndex) {
											return columnTypes[columnIndex];
										}

										@Override
										public boolean isCellEditable(
												int rowIndex, int columnIndex) {
											return columnEditable[columnIndex];
										}
									});
							{
								TableColumnModel cm = tablaInfo
										.getColumnModel();
								cm.getColumn(0).setResizable(false);
								cm.getColumn(1).setMinWidth(
										(int) (wPInfo * 1.215));
								cm.getColumn(0).setPreferredWidth(
										(int) (wPInfo * 0.5));
								cm.getColumn(1).setPreferredWidth(
										(int) (wPInfo * 1.215));
							}
							tablaInfo.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

							tablaInfo.setBorder(null);
							tablaInfo.setFocusable(false);
							tablaInfo
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							tablaInfo.setSelectionBackground(colorBorde);
							tablaInfo.setSelectionForeground(Color.black);
							tablaInfo
									.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
							tablaInfo.setFillsViewportHeight(true);
							tablaInfo.setShowHorizontalLines(false);
							tablaInfo.setShowVerticalLines(false);
							tablaInfo.getTableHeader().setReorderingAllowed(
									false);
							scrollPaneInfo.setViewportView(tablaInfo);

						}
						panelInfo.add(scrollPaneInfo, new CellConstraints(1, 2,
								1, 1, CellConstraints.FILL,
								CellConstraints.FILL, new Insets(2, 0, 0, 0)));

						// ---- fieldBuscar ----
						{
							fieldBuscar.setBorder(new LineBorder(colorBorde, 2,
									true));
							fieldBuscar.setFocusable(false);
							fieldBuscar.setMargin(new Insets(2, 2, 2, 2));
							// fieldBuscar.setText("Buscar...");
							try {
								fieldBuscar.getDocument().insertString(0,
										"Buscar...", null);
							} catch (BadLocationException e2) {
								e2.printStackTrace();
							}
							fieldBuscar.addMouseListener(new MouseAdapter() {

								@Override
								public void mousePressed(MouseEvent e) {
									fieldBuscarMousePressed(e);
								}
							});
							fieldBuscar.addFocusListener(new FocusAdapter() {

								@Override
								public void focusLost(FocusEvent e) {
									try {
										fieldBuscar.setText("");
										fieldBuscar.getDocument().insertString(
												0, "Buscar...", null);
									} catch (BadLocationException e1) {
										e1.printStackTrace();
									}
								}
							});
							fieldBuscar.getDocument().addDocumentListener(
									new DocumentListener() {

										@Override
										public void removeUpdate(DocumentEvent e) {
											buscar();
										}

										@Override
										public void insertUpdate(DocumentEvent e) {
											buscar();
										}

										@Override
										public void changedUpdate(
												DocumentEvent e) {
										}
									});
							fieldBuscar.setPreferredSize(new Dimension(wBuscar,
									hBuscar));
							fieldBuscar.setFont(new Font(fieldBuscar.getFont()
									.getName(), Font.BOLD, fieldBuscar
									.getFont().getSize() + 2));
						}
						panelInfo.add(fieldBuscar, new CellConstraints(1, 3, 1,
								1, CellConstraints.LEFT, CellConstraints.TOP,
								new Insets(11, 0, 0, 2)));
						// ---- botonEditar ----
						{
							botonEditar
									.setIcon(new ImageIcon(FormPrincipal.class
											.getClassLoader().getResource(
													"img/editar_28x29.png")));
							botonEditar.setCursor(Cursor
									.getPredefinedCursor(Cursor.HAND_CURSOR));
							botonEditar.setBackground(Color.black);
							botonEditar.setToolTipText("Editar propiedades");
							botonEditar.setFocusable(false);
							botonEditar
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							botonEditar.addActionListener(new ActionListener() {
								public void actionPerformed(ActionEvent e) {
									botonEditarActionPerformed(e);
								}
							});
						}
						panelInfo.add(botonEditar, new CellConstraints(1, 3, 1,
								1, CellConstraints.RIGHT, CellConstraints.TOP,
								new Insets(5, 0, 0, 2)));
					}
					panelBiblioteca.add(panelInfo, new CellConstraints(3, 1, 1,
							1, CellConstraints.FILL, CellConstraints.FILL));
				}
				panelVentana.add(panelBiblioteca, new CellConstraints(1, 2, 1,
						1, CellConstraints.FILL, CellConstraints.FILL,
						new Insets(0, 5, 3, 5)));

				// ======== panelReproduccion ========
				{
					panelReproduccion
							.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
					panelReproduccion.setBorder(new LineBorder(colorBorde, 2,
							true));
					panelReproduccion.setLayout(new FormLayout(sWPReproduccion,
							sHPReproduccion));

					// ======== panelBotones ========
					{
						panelBotones.setBorder(null);
						panelBotones
								.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
						panelBotones.setBackground(Color.black);
						panelBotones.setLayout(new FormLayout(sWPBotones,
								sHPBotones));

						// ======== panelI ========
						{
							panelI.setBackground(Color.black);
							panelI.setLayout(new FormLayout(sWPI, sHPI));

							// ---- botonAnterior ----
							botonAnterior.setBackground(Color.black);
							botonAnterior.setToolTipText("Anterior");
							botonAnterior
									.setIcon(new ImageIcon(
											FormPrincipal.class
													.getClassLoader()
													.getResource(
															"img/anterior_35x35gris.png")));
							botonAnterior
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							botonAnterior.setCursor(Cursor
									.getPredefinedCursor(Cursor.HAND_CURSOR));
							botonAnterior.setFocusable(false);
							botonAnterior
									.addActionListener(new ActionListener() {
										public void actionPerformed(
												ActionEvent e) {
											botonAnteriorActionPerformed(e);
										}
									});
							panelI.add(botonAnterior, cc.xy(1, 1));

							// ---- botonRetroceder ----
							botonRetroceder.setBackground(Color.black);
							botonRetroceder.setToolTipText("Retroceder");
							botonRetroceder
									.setIcon(new ImageIcon(
											FormPrincipal.class
													.getClassLoader()
													.getResource(
															"img/retroceder_35x35gris.png")));
							botonRetroceder
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							botonRetroceder.setCursor(Cursor
									.getPredefinedCursor(Cursor.HAND_CURSOR));
							botonRetroceder.setFocusable(false);
							botonRetroceder
									.addActionListener(new ActionListener() {
										public void actionPerformed(
												ActionEvent e) {
											botonRetrocederActionPerformed(e);
										}
									});
							panelI.add(botonRetroceder, cc.xy(2, 1));
						}
						panelBotones.add(panelI, cc.xy(1, 1));

						// ======== panelC ========
						{
							panelC.setBackground(Color.black);
							panelC.setLayout(new FormLayout(sWPC, sHPC));

							// ---- botonPlay ----
							botonPlay.setBackground(Color.black);
							botonPlay.setIcon(new ImageIcon(FormPrincipal.class
									.getClassLoader().getResource(
											"img/play_60x60gris.png")));
							botonPlay.setToolTipText("Play/Pause");
							botonPlay
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							botonPlay.setCursor(Cursor
									.getPredefinedCursor(Cursor.HAND_CURSOR));
							botonPlay.setFocusable(false);
							botonPlay.addActionListener(new ActionListener() {
								public void actionPerformed(ActionEvent e) {
									botonPlayActionPerformed(e);
								}
							});
							panelC.add(botonPlay, cc.xywh(1, 1, 1, 1,
									CellConstraints.CENTER,
									CellConstraints.CENTER));

							// ---- botonStop ----
							botonStop.setBackground(Color.black);
							botonStop.setIcon(new ImageIcon(FormPrincipal.class
									.getClassLoader().getResource(
											"img/stop_35x35gris.png")));
							botonStop.setToolTipText("Stop");
							botonStop
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							botonStop.setCursor(Cursor
									.getPredefinedCursor(Cursor.HAND_CURSOR));
							botonStop.setFocusable(false);
							botonStop.addActionListener(new ActionListener() {
								public void actionPerformed(ActionEvent e) {
									botonStopActionPerformed(e);
								}
							});
							panelC.add(botonStop, cc.xywh(1, 2, 1, 1,
									CellConstraints.CENTER,
									CellConstraints.DEFAULT));
						}
						panelBotones.add(panelC, new CellConstraints(2, 1, 1,
								1, CellConstraints.FILL, CellConstraints.FILL,
								new Insets(3, 0, 0, 0)));

						// ======== panelD ========
						{
							panelD.setBackground(Color.black);
							panelD.setLayout(new FormLayout(sWPD, sHPD));

							// ---- botonAvanzar ----
							botonAvanzar.setBackground(Color.black);
							botonAvanzar.setToolTipText("Avanzar");
							botonAvanzar
									.setIcon(new ImageIcon(
											FormPrincipal.class
													.getClassLoader()
													.getResource(
															"img/avanzar_35x35gris.png")));
							botonAvanzar
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							botonAvanzar.setCursor(Cursor
									.getPredefinedCursor(Cursor.HAND_CURSOR));
							botonAvanzar.setFocusable(false);
							botonAvanzar
									.addActionListener(new ActionListener() {
										public void actionPerformed(
												ActionEvent e) {
											botonAvanzarActionPerformed(e);
										}
									});
							panelD.add(botonAvanzar, cc.xy(1, 1));

							// ---- botonSiguiente ----
							botonSiguiente.setBackground(Color.black);
							botonSiguiente.setToolTipText("Siguiente");
							botonSiguiente
									.setIcon(new ImageIcon(
											FormPrincipal.class
													.getClassLoader()
													.getResource(
															"img/siguiente_35x35gris.png")));
							botonSiguiente
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							botonSiguiente.setCursor(Cursor
									.getPredefinedCursor(Cursor.HAND_CURSOR));
							botonSiguiente.setFocusable(false);
							botonSiguiente
									.addActionListener(new ActionListener() {
										public void actionPerformed(
												ActionEvent e) {
											botonSiguienteActionPerformed(e);
										}
									});
							panelD.add(botonSiguiente, cc.xywh(2, 1, 1, 1,
									CellConstraints.FILL,
									CellConstraints.DEFAULT));
						}
						panelBotones.add(panelD, cc.xy(3, 1));
					}
					panelReproduccion.add(panelBotones, new CellConstraints(1,
							1, 1, 1, CellConstraints.FILL,
							CellConstraints.FILL, new Insets(0, 0, 0, 0)));

					// ======== panelEstado ========
					{
						panelEstado
								.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
						panelEstado.setBackground(Color.black);
						panelEstado.setLayout(new FormLayout(sWPEstado,
								sHPEstado));

						// ---- progreso ----
						progreso.setCursor(Cursor
								.getPredefinedCursor(Cursor.HAND_CURSOR));
						progreso.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
						progreso.setBorder(null);
						progreso.setValue(0);
						progreso.setEnabled(false);
						progreso.addMouseListener(new MouseAdapter() {

							@Override
							public void mouseReleased(MouseEvent e) {
								progresoMouseReleased(e);
							}
						});
						panelEstado.add(progreso, cc.xywh(1, 1, 1, 1,
								CellConstraints.FILL, CellConstraints.CENTER));

						// ---- labelArchivo ----
						labelArchivo.setText("");
						labelArchivo
								.setHorizontalAlignment(SwingConstants.LEFT);
						labelArchivo.setForeground(color);
						labelArchivo.setFont(fuente.deriveFont(labelArchivo
								.getFont().getStyle() | Font.BOLD, labelArchivo
								.getFont().getSize() + 22f));
						labelArchivo
								.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
						panelEstado.add(labelArchivo, cc.xywh(1, 2, 1, 1,
								CellConstraints.FILL, CellConstraints.FILL));

						// ======== panelActual ========
						{
							panelActual
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							panelActual.setBackground(Color.black);
							panelActual.setLayout(new FormLayout(sWPActual,
									sHPActual));

							// ---- labelPista ----
							labelPista.setText("Pista: ");
							labelPista
									.setHorizontalAlignment(SwingConstants.LEFT);
							labelPista.setForeground(color);
							labelPista.setToolTipText("Pista");
							labelPista.setFont(fuente.deriveFont(labelPista
									.getFont().getStyle() | Font.BOLD,
									labelPista.getFont().getSize() + 6f));
							panelActual.add(labelPista, cc.xy(1, 1));

							// ---- labelTiempo ----
							labelTiempo.setText("- Tiempo: ");
							labelTiempo
									.setHorizontalAlignment(SwingConstants.LEFT);
							labelTiempo.setForeground(color);
							labelTiempo.setToolTipText("Tiempo");
							labelTiempo.setFont(fuente.deriveFont(labelTiempo
									.getFont().getStyle() | Font.BOLD,
									labelTiempo.getFont().getSize() + 6f));
							panelActual.add(labelTiempo, cc.xy(2, 1));

							// ---- labelEstado ----
							labelEstado.setText("Parado");
							labelEstado.setForeground(color);
							labelEstado.setToolTipText("Estado");
							labelEstado
									.setHorizontalAlignment(SwingConstants.RIGHT);
							labelEstado
									.setHorizontalTextPosition(SwingConstants.RIGHT);
							labelEstado
									.setIcon(new ImageIcon(FormPrincipal.class
											.getClassLoader().getResource(
													"img/stop_16x16.png")));
							labelEstado.setFont(fuente.deriveFont(labelEstado
									.getFont().getStyle() | Font.BOLD,
									labelEstado.getFont().getSize() + 6f));
							panelActual.add(labelEstado, new CellConstraints(3,
									1, 1, 1, CellConstraints.DEFAULT,
									CellConstraints.DEFAULT, new Insets(0, 0,
											0, 4)));
						}
						panelEstado.add(panelActual, cc.xywh(1, 3, 1, 1,
								CellConstraints.FILL, CellConstraints.FILL));
					}
					panelReproduccion.add(panelEstado, cc.xywh(2, 1, 1, 1,
							CellConstraints.FILL, CellConstraints.FILL));

					// ======== panelVolGeneral ========
					{
						panelVolGeneral
								.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
						panelVolGeneral.setBackground(Color.black);
						panelVolGeneral.setLayout(new FormLayout(sWPVolGeneral,
								sHPVolGeneral));

						// ======== panelOpciones ========
						{
							panelOpciones
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							panelOpciones.setBackground(Color.black);
							panelOpciones.setLayout(new FormLayout(sWPOpciones,
									sHPOpciones));

							// ---- labelRepetir ----
							labelRepetir
									.setIcon(new ImageIcon(FormPrincipal.class
											.getClassLoader().getResource(
													"img/repetirOFF_35x35.png")));
							labelRepetir
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							labelRepetir.setFocusable(false);
							labelRepetir.addMouseListener(new MouseAdapter() {

								@Override
								public void mousePressed(MouseEvent e) {
									labelRepetirMousePressed(e);
								}
							});
							panelOpciones.add(labelRepetir,
									new CellConstraints(1, 1, 1, 1,
											CellConstraints.CENTER,
											CellConstraints.FILL));

							// ---- labelAleatorio ----
							labelAleatorio
									.setIcon(new ImageIcon(
											FormPrincipal.class
													.getClassLoader()
													.getResource(
															"img/aleatorioOFF_35x35.png")));
							labelAleatorio
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							labelAleatorio.setFocusable(false);
							labelAleatorio.addMouseListener(new MouseAdapter() {

								@Override
								public void mousePressed(MouseEvent e) {
									labelAleatorioMousePressed(e);
								}
							});
							panelOpciones.add(labelAleatorio,
									new CellConstraints(1, 2, 1, 1,
											CellConstraints.CENTER,
											CellConstraints.FILL));

							// ---- labelVolumen ----
							labelVolumen
									.setIcon(new ImageIcon(FormPrincipal.class
											.getClassLoader().getResource(
													"img/volumenON_35x35.png")));
							labelVolumen
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							labelVolumen.setFocusable(false);
							labelVolumen.addMouseListener(new MouseAdapter() {

								@Override
								public void mousePressed(MouseEvent e) {
									labelVolumenMousePressed(e);
								}
							});
							panelOpciones.add(labelVolumen,
									new CellConstraints(1, 3, 1, 1,
											CellConstraints.CENTER,
											CellConstraints.FILL));
						}
						panelVolGeneral.add(panelOpciones, cc.xywh(1, 1, 1, 1,
								CellConstraints.FILL, CellConstraints.FILL));

						// ======== panelVolumen ========
						{
							panelVolumen
									.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							panelVolumen.setBackground(Color.black);
							panelVolumen.setLayout(new FormLayout(sWPVolumen,
									sHPVolumen));

							// ---- Volumen (barra) ----
							volumen.setCursor(Cursor
									.getPredefinedCursor(Cursor.HAND_CURSOR));
							volumen.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
							volumen.setBorder(null);
							volumen.setMajorTickSpacing(25);
							volumen.setMinorTickSpacing(5);
							volumen.setPaintTicks(true);
							volumen.setPaintLabels(true);
							volumen.setForeground(color);
							volumen.setFont(fuente.deriveFont(volumen.getFont()
									.getStyle() | Font.BOLD, volumen.getFont()
									.getSize() + 2f));
							volumen.setToolTipText("Volumen: "
									+ Integer.toString(volumen.getValue()));
							volumen.addChangeListener(new ChangeListener() {
								@Override
								public void stateChanged(ChangeEvent e) {
									JSlider source = (JSlider) e.getSource();
									if (!source.getValueIsAdjusting()) {
										int vol = (int) ((JSlider) e
												.getSource()).getValue();
										volumen.setToolTipText(Integer
												.toString(vol));
										Controlador.cambiaVolumen(vol);
									}
								}
							});
							panelVolumen
									.add(volumen, cc.xywh(1, 1, 1, 1,
											CellConstraints.LEFT,
											CellConstraints.FILL));
						}
						panelVolGeneral.add(panelVolumen, cc.xywh(2, 1, 1, 1,
								CellConstraints.FILL, CellConstraints.FILL));
					}
					panelReproduccion.add(panelVolGeneral, new CellConstraints(
							3, 1, 1, 1, CellConstraints.FILL,
							CellConstraints.FILL, new Insets(4, 0, 0, 0)));
				}
				panelVentana.add(panelReproduccion, new CellConstraints(1, 3,
						1, 1, CellConstraints.FILL, CellConstraints.FILL,
						new Insets(2, 50, 3, 50)));
			}
			ventanaContentPane.add(panelVentana, cc.xywh(1, 1, 1, 1,
					CellConstraints.FILL, CellConstraints.FILL));
		}
	}

	/*--- METODOS PUBLICOS ---*/
	public void show() {
		ventana.pack();
		ventana.setLocationRelativeTo(null);
		ventana.setVisible(true);
	}

	public void actualizaCaratula() {

	}

	public void creaArbol(DefaultTreeModel modelo) {
		arbolBiblioteca.setModel(modelo);
		arbolBiblioteca.setSelectionPath(new TreePath(arbolBiblioteca
				.getModel().getRoot()));
	}

	public void actualizaTablaInfo(DefaultTableModel modelo) {
		tablaInfo.setModel(modelo);
	}

	public void actualizaTablaLista(DefaultTableModel modelo) {
		tablaLista.setModel(modelo);
	}

	public void actualizaArchivo(String ruta, String nombre) {
		labelArchivo.setToolTipText(ruta);
		labelArchivo.setText(nombre);
	}

	public void actualizaPista(String pistaActual, String numPistas) {
		labelPista.setText("Pista: " + pistaActual + "/" + numPistas);
		labelPista.setToolTipText("Pista: " + pistaActual + "/" + numPistas);
	}

	public void actualizaTiempo(String tiempoActual, String tiempoTotal) {
		labelTiempo.setText("- Tiempo: " + tiempoActual + "/" + tiempoTotal);
		labelTiempo.setToolTipText("Tiempo: " + tiempoActual + "/"
				+ tiempoTotal);
	}

	public void actualizaEstado(String estado) {
		labelEstado.setText(estado);
		labelEstado.setToolTipText(estado);
		if (estado.equals("Reproduciendo")) {
			labelEstado.setIcon(new ImageIcon(FormPrincipal.class
					.getClassLoader().getResource("img/play_16x16.png")));
			botonPlay.setIcon(new ImageIcon(FormPrincipal.class
					.getClassLoader().getResource("img/pausa_60x60.png")));
		} else if (estado.equals("Parado")) {
			labelEstado.setIcon(new ImageIcon(FormPrincipal.class
					.getClassLoader().getResource("img/stop_16x16.png")));
			botonPlay.setIcon(new ImageIcon(FormPrincipal.class
					.getClassLoader().getResource("img/play_60x60.png")));
		} else { // Pausa
			labelEstado.setIcon(new ImageIcon(FormPrincipal.class
					.getClassLoader().getResource("img/pausa_16x16.png")));
			botonPlay.setIcon(new ImageIcon(FormPrincipal.class
					.getClassLoader().getResource("img/play_60x60.png")));
		}
	}

	public void actualizaMute(boolean mute) {
		if (mute) {
			labelVolumen.setIcon(new ImageIcon(FormPrincipal.class
					.getClassLoader().getResource("img/volumenOFF_35x35.png")));
			labelVolumen.setToolTipText("Volumen OFF");
		} else {
			labelVolumen.setIcon(new ImageIcon(FormPrincipal.class
					.getClassLoader().getResource("img/volumenON_35x35.png")));
			labelVolumen.setToolTipText("Volumen ON");
		}
	}

	public void habilitaMenuReproduccion() {
		menuItemPlay.setIcon(new ImageIcon(FormPrincipal.class.getClassLoader()
				.getResource("img/playPause_16x16.png")));
		menuItemPlay.setForeground(Color.black);
		menuItemStop.setIcon(new ImageIcon(FormPrincipal.class.getClassLoader()
				.getResource("img/stop_16x16.png")));
		menuItemStop.setForeground(Color.black);
		menuItemRetroceder.setIcon(new ImageIcon(FormPrincipal.class
				.getClassLoader().getResource("img/retroceder_16x16.png")));
		menuItemRetroceder.setForeground(Color.black);
		menuItemAvanzar.setIcon(new ImageIcon(FormPrincipal.class
				.getClassLoader().getResource("img/avanzar_16x16.png")));
		menuItemAvanzar.setForeground(Color.black);
		menuItemAnterior.setIcon(new ImageIcon(FormPrincipal.class
				.getClassLoader().getResource("img/anterior_16x16.png")));
		menuItemAnterior.setForeground(Color.black);
		menuItemSiguiente.setIcon(new ImageIcon(FormPrincipal.class
				.getClassLoader().getResource("img/siguiente_16x16.png")));
		menuItemSiguiente.setForeground(Color.black);
	}

	public void habilitaBotones() {
		botonPlay.setIcon(new ImageIcon(FormPrincipal.class.getClassLoader()
				.getResource("img/play_60x60.png")));
		botonStop.setIcon(new ImageIcon(FormPrincipal.class.getClassLoader()
				.getResource("img/stop_35x35.png")));
		botonRetroceder.setIcon(new ImageIcon(FormPrincipal.class
				.getClassLoader().getResource("img/retroceder_35x35.png")));
		botonAvanzar.setIcon(new ImageIcon(FormPrincipal.class.getClassLoader()
				.getResource("img/avanzar_35x35.png")));
		botonAnterior.setIcon(new ImageIcon(FormPrincipal.class
				.getClassLoader().getResource("img/anterior_35x35.png")));
		botonSiguiente.setIcon(new ImageIcon(FormPrincipal.class
				.getClassLoader().getResource("img/siguiente_35x35.png")));
	}

	public void habilitaProgreso(int duracion) {
		progreso.setMaximum(duracion);
		progreso.setEnabled(true);
	}

	public void habilitaGuardar() {
		menuItemGuardar.setEnabled(true);
	}

	public void actualizaProgreso(int tiempo, String stringTiempo) {
		progreso.setValue(tiempo);
		progreso.setToolTipText(stringTiempo);
	}

	/*--- ACCIONES ---*/
	private void menuItemImportarArchivosActionPerformed(ActionEvent e) {
		Controlador.importarArchivos(ventana);
	}

	private void menuItemImportarCarpetaActionPerformed(ActionEvent e) {
		Controlador.importarCarpeta(ventana);
	}

	private void menuItemCrearListaActionPerformed(ActionEvent e) {
		Controlador.crearLista(ventana);
	}
	
	private void menuItemAbrirListaActionPerformed(ActionEvent e) {
		Controlador.abrirLista(ventana);
	}

	private void menuItemGuardarListaActionPerformed(ActionEvent e) {
		Controlador.guardar();
	}

	private void menuItemGuardarListaComoActionPerformed(ActionEvent e) {
		Controlador.guardaListaComo(ventana);
	}

	private void menuItemPlayActionPerformed(ActionEvent e) {
		if (reproducible) {
			Controlador.play();
		}
	}

	private void menuItemStopActionPerformed(ActionEvent e) {
		if (reproducible) {
			Controlador.stop();
		}
	}

	private void menuItemRetrocederActionPerformed(ActionEvent e) {
		if (reproducible) {
			Controlador.retroceder();
		}
	}

	private void menuItemAvanzarActionPerformed(ActionEvent e) {
		if (reproducible) {
			Controlador.avanzar();
		}
	}

	private void menuItemAnteriorActionPerformed(ActionEvent e) {
		if (reproducible) {
			Controlador.anterior();
		}
	}

	private void menuItemSiguienteActionPerformed(ActionEvent e) {
		if (reproducible) {
			Controlador.siguiente();
		}
	}

	private void menuItemAyudaActionPerformed(ActionEvent e) {
		Controlador.ayuda();
	}

	private void menuItemSalirActionPerformed(ActionEvent e) {
		Controlador.salir(0);
	}

	private void botonAyudaActionPerformed(ActionEvent e) {
		Controlador.ayuda();
	}

	private void botonMinimizarActionPerformed(ActionEvent e) {
		Controlador.minimizar();
	}

	private void botonSalirActionPerformed(ActionEvent e) {
		Controlador.salir(0);
	}

	private void fieldBuscarMousePressed(MouseEvent e) {
		fieldBuscar.setFocusable(true);
		fieldBuscar.selectAll();
		fieldBuscar.requestFocus();
	}

	private void buscar() {
		String texto = fieldBuscar.getText();
		if (!texto.equals("")) {
			// Controlador.buscar(texto);
		}
	}

	private void botonAnteriorActionPerformed(ActionEvent e) {
		if (reproducible) {
			Controlador.anterior();
		}
	}

	private void botonRetrocederActionPerformed(ActionEvent e) {
		if (reproducible) {
			Controlador.retroceder();
		}
	}

	private void botonPlayActionPerformed(ActionEvent e) {
		if (reproducible) {
			Controlador.play();
		}
	}

	private void botonStopActionPerformed(ActionEvent e) {
		if (reproducible) {
			Controlador.stop();
		}
	}

	private void botonAvanzarActionPerformed(ActionEvent e) {
		if (reproducible) {
			Controlador.avanzar();
		}
	}

	private void botonSiguienteActionPerformed(ActionEvent e) {
		if (reproducible) {
			Controlador.siguiente();
		}
	}

	private void botonAnyadirActionPerformed(ActionEvent e) {
		Controlador.importarArchivos(ventana);
	}

	private void botonEliminarActionPerformed(ActionEvent e) {

	}

	private void botonLimpiarActionPerformed(ActionEvent e) {

	}

	private void botonAbrirActionPerformed(ActionEvent e) {
		Controlador.abrirLista(ventana);
	}

	private void botonGuardarActionPerformed(ActionEvent e) {
		Controlador.guardar();
	}

	private void botonEditarActionPerformed(ActionEvent e) {
		Controlador.editar();
	}

	private void progresoMouseReleased(MouseEvent e) {
		JSlider source = (JSlider) e.getSource();
		if (!source.getValueIsAdjusting()) {
			int segundos = (int) ((JSlider) e.getSource()).getValue();
			Controlador.cambiaTiempo(segundos);
		}
	}

	private void dobleClickTablaActionPerformed(MouseEvent e) {
		int numFila = tablaLista.getSelectedRow();
		Controlador.dobleClick(numFila);
	}

	private void labelRepetirMousePressed(MouseEvent e) {
		Controlador.repetir();
	}

	private void labelAleatorioMousePressed(MouseEvent e) {
		Controlador.aleatorio();
	}

	private void labelVolumenMousePressed(MouseEvent e) {
		Controlador.mute();
	}

	/*--- GETTERS Y SETTERS ---*/
	public JFrame getVentana() {
		return ventana;
	}

	public void setVentana(JFrame ventana) {
		this.ventana = ventana;
	}

	public JPanelImagen getPanelVentana() {
		return panelVentana;
	}

	public void setPanelVentana(JPanelImagen panelVentana) {
		this.panelVentana = panelVentana;
	}

	public JPanelImagen getPanelSuperior() {
		return panelSuperior;
	}

	public void setPanelSuperior(JPanelImagen panelSuperior) {
		this.panelSuperior = panelSuperior;
	}

	public JMenuBar getBarraMenu() {
		return barraMenu;
	}

	public void setBarraMenu(JMenuBar barraMenu) {
		this.barraMenu = barraMenu;
	}

	public JMenu getMenu() {
		return menu;
	}

	public void setMenu(JMenu menu) {
		this.menu = menu;
	}

	public JMenu getMenuBiblioteca() {
		return menuBiblioteca;
	}

	public void setMenuBiblioteca(JMenu menuBiblioteca) {
		this.menuBiblioteca = menuBiblioteca;
	}

	public JMenuItem getMenuItemAbrirArchivo() {
		return menuItemImportarArchivos;
	}

	public void setMenuItemAbrirArchivo(JMenuItem menuItemAbrirArchivo) {
		this.menuItemImportarArchivos = menuItemAbrirArchivo;
	}

	public JMenuItem getMenuItemAbrirCarpeta() {
		return menuItemImportarCarpeta;
	}

	public void setMenuItemAbrirCarpeta(JMenuItem menuItemAbrirCarpeta) {
		this.menuItemImportarCarpeta = menuItemAbrirCarpeta;
	}

	public JMenuItem getMenuItemAbrirBiblioteca() {
		return menuItemAbrirLista;
	}

	public void setMenuItemAbrirBiblioteca(JMenuItem menuItemAbrirBiblioteca) {
		this.menuItemAbrirLista = menuItemAbrirBiblioteca;
	}

	public JMenu getMenuReproduccion() {
		return menuReproduccion;
	}

	public void setMenuReproduccion(JMenu menuReproduccion) {
		this.menuReproduccion = menuReproduccion;
	}

	public JMenuItem getMenuItemPlay() {
		return menuItemPlay;
	}

	public void setMenuItemPlay(JMenuItem menuItemPlay) {
		this.menuItemPlay = menuItemPlay;
	}

	public JMenuItem getMenuItemStop() {
		return menuItemStop;
	}

	public void setMenuItemStop(JMenuItem menuItemStop) {
		this.menuItemStop = menuItemStop;
	}

	public JMenuItem getMenuItemRetroceder() {
		return menuItemRetroceder;
	}

	public void setMenuItemRetroceder(JMenuItem menuItemRetroceder) {
		this.menuItemRetroceder = menuItemRetroceder;
	}

	public JMenuItem getMenuItemAvanzar() {
		return menuItemAvanzar;
	}

	public void setMenuItemAvanzar(JMenuItem menuItemAvanzar) {
		this.menuItemAvanzar = menuItemAvanzar;
	}

	public JMenuItem getMenuItemAnterior() {
		return menuItemAnterior;
	}

	public void setMenuItemAnterior(JMenuItem menuItemAnterior) {
		this.menuItemAnterior = menuItemAnterior;
	}

	public JMenuItem getMenuItemSiguiente() {
		return menuItemSiguiente;
	}

	public void setMenuItemSiguiente(JMenuItem menuItemSiguiente) {
		this.menuItemSiguiente = menuItemSiguiente;
	}	

	public JMenuItem getMenuItemAyuda() {
		return menuItemAyuda;
	}

	public void setMenuItemAyuda(JMenuItem menuItemAyuda) {
		this.menuItemAyuda = menuItemAyuda;
	}

	public JMenuItem getMenuItemSalir() {
		return menuItemSalir;
	}

	public void setMenuItemSalir(JMenuItem menuItemSalir) {
		this.menuItemSalir = menuItemSalir;
	}

	public JLabel getLabelTitulo() {
		return labelTitulo;
	}

	public void setLabelTitulo(JLabel labelTitulo) {
		this.labelTitulo = labelTitulo;
	}

	public JButton getBotonAyuda() {
		return botonAyuda;
	}

	public void setBotonAyuda(JButton botonAyuda) {
		this.botonAyuda = botonAyuda;
	}

	public JButton getBotonMinimizar() {
		return botonMinimizar;
	}

	public void setBotonMinimizar(JButton botonMinimizar) {
		this.botonMinimizar = botonMinimizar;
	}

	public JButton getBotonSalir() {
		return botonSalir;
	}

	public void setBotonSalir(JButton botonSalir) {
		this.botonSalir = botonSalir;
	}

	public JPanel getPanelBiblioteca() {
		return panelBiblioteca;
	}

	public void setPanelBiblioteca(JPanel panelBiblioteca) {
		this.panelBiblioteca = panelBiblioteca;
	}

	public JPanel getPanelInfo() {
		return panelInfo;
	}

	public void setPanelInfo(JPanel panelInfo) {
		this.panelInfo = panelInfo;
	}

	public JPanelImagen getPanelCaratula() {
		return panelCaratula;
	}

	public void setPanelCaratula(JPanelImagen panelCaratula) {
		this.panelCaratula = panelCaratula;
	}

	public JLabel getLabelCaratula() {
		return labelCaratula;
	}

	public void setLabelCaratula(JLabel labelCaratula) {
		this.labelCaratula = labelCaratula;
	}

	public JLabel getLabelPropiedades() {
		return labelPropiedades;
	}

	public void setLabelPropiedades(JLabel labelPropiedades) {
		this.labelPropiedades = labelPropiedades;
	}

	public JScrollPane getScrollPaneInfo() {
		return scrollPaneInfo;
	}

	public void setScrollPaneInfo(JScrollPane scrollPaneInfo) {
		this.scrollPaneInfo = scrollPaneInfo;
	}

	public JTable getTablaInfo() {
		return tablaInfo;
	}

	public void setTablaInfo(JTable tablaInfo) {
		this.tablaInfo = tablaInfo;
	}

	public JPanel getPanelLista() {
		return panelLista;
	}

	public void setPanelLista(JPanel panelLista) {
		this.panelLista = panelLista;
	}

	public JScrollPane getScrollPaneLista() {
		return scrollPaneLista;
	}

	public void setScrollPaneLista(JScrollPane scrollPaneLista) {
		this.scrollPaneLista = scrollPaneLista;
	}

	public JTable getTablaLista() {
		return tablaLista;
	}

	public void setTablaLista(JTable tablaLista) {
		this.tablaLista = tablaLista;
	}

	public JPanelImagen getPanelReproduccion() {
		return panelReproduccion;
	}

	public void setPanelReproduccion(JPanelImagen panelReproduccion) {
		this.panelReproduccion = panelReproduccion;
	}

	public JPanel getPanelBotones() {
		return panelBotones;
	}

	public void setPanelBotones(JPanel panelBotones) {
		this.panelBotones = panelBotones;
	}

	public JPanel getPanelI() {
		return panelI;
	}

	public void setPanelI(JPanel panelI) {
		this.panelI = panelI;
	}

	public JButton getBotonAnterior() {
		return botonAnterior;
	}

	public void setBotonAnterior(JButton botonAnterior) {
		this.botonAnterior = botonAnterior;
	}

	public JButton getBotonRetroceder() {
		return botonRetroceder;
	}

	public void setBotonRetroceder(JButton botonRetroceder) {
		this.botonRetroceder = botonRetroceder;
	}

	public JPanel getPanelC() {
		return panelC;
	}

	public void setPanelC(JPanel panelC) {
		this.panelC = panelC;
	}

	public JButton getBotonPlay() {
		return botonPlay;
	}

	public void setBotonPlay(JButton botonPlay) {
		this.botonPlay = botonPlay;
	}

	public JButton getBotonStop() {
		return botonStop;
	}

	public void setBotonStop(JButton botonStop) {
		this.botonStop = botonStop;
	}

	public JPanel getPanelD() {
		return panelD;
	}

	public void setPanelD(JPanel panelD) {
		this.panelD = panelD;
	}

	public JButton getBotonAvanzar() {
		return botonAvanzar;
	}

	public void setBotonAvanzar(JButton botonAvanzar) {
		this.botonAvanzar = botonAvanzar;
	}

	public JButton getBotonSiguiente() {
		return botonSiguiente;
	}

	public void setBotonSiguiente(JButton botonSiguiente) {
		this.botonSiguiente = botonSiguiente;
	}

	public JPanel getPanelEstado() {
		return panelEstado;
	}

	public void setPanelEstado(JPanel panelEstado) {
		this.panelEstado = panelEstado;
	}

	public JSlider getProgreso() {
		return progreso;
	}

	public void setProgreso(JSlider progreso) {
		this.progreso = progreso;
	}

	public JPanel getPanelActual() {
		return panelActual;
	}

	public void setPanelActual(JPanel panelActual) {
		this.panelActual = panelActual;
	}

	public JLabel getLabelPista() {
		return labelPista;
	}

	public void setLabelPista(JLabel labelPista) {
		this.labelPista = labelPista;
	}

	public JLabel getLabelTiempo() {
		return labelTiempo;
	}

	public void setLabelTiempo(JLabel labelTiempo) {
		this.labelTiempo = labelTiempo;
	}

	public JLabel getLabelEstado() {
		return labelEstado;
	}

	public void setLabelEstado(JLabel labelEstado) {
		this.labelEstado = labelEstado;
	}

	public boolean isReproducible() {
		return reproducible;
	}

	public void setReproducible(boolean reproducible) {
		this.reproducible = reproducible;
	}

	public JLabel getLabelArchivo() {
		return labelArchivo;
	}

	public void setLabelArchivo(JLabel labelArchivo) {
		this.labelArchivo = labelArchivo;
	}

	/**
	 * @return the menuItemImportarArchivos
	 */
	public JMenuItem getMenuItemImportarArchivos() {
		return menuItemImportarArchivos;
	}

	/**
	 * @param menuItemImportarArchivos
	 *            the menuItemImportarArchivos to set
	 */
	public void setMenuItemImportarArchivos(JMenuItem menuItemImportarArchivos) {
		this.menuItemImportarArchivos = menuItemImportarArchivos;
	}

	/**
	 * @return the menuItemImportarCarpeta
	 */
	public JMenuItem getMenuItemImportarCarpeta() {
		return menuItemImportarCarpeta;
	}

	/**
	 * @param menuItemImportarCarpeta
	 *            the menuItemImportarCarpeta to set
	 */
	public void setMenuItemImportarCarpeta(JMenuItem menuItemImportarCarpeta) {
		this.menuItemImportarCarpeta = menuItemImportarCarpeta;
	}

	/**
	 * @return the menuItemAbrirLista
	 */
	public JMenuItem getMenuItemAbrirLista() {
		return menuItemAbrirLista;
	}

	/**
	 * @param menuItemAbrirLista
	 *            the menuItemAbrirLista to set
	 */
	public void setMenuItemAbrirLista(JMenuItem menuItemAbrirLista) {
		this.menuItemAbrirLista = menuItemAbrirLista;
	}

	/**
	 * @return the menuItemGuardar
	 */
	public JMenuItem getMenuItemGuardar() {
		return menuItemGuardar;
	}

	/**
	 * @param menuItemGuardar
	 *            the menuItemGuardar to set
	 */
	public void setMenuItemGuardar(JMenuItem menuItemGuardar) {
		this.menuItemGuardar = menuItemGuardar;
	}

	/**
	 * @return the menuItemGuardarListaComo
	 */
	public JMenuItem getMenuItemGuardarListaComo() {
		return menuItemGuardarListaComo;
	}

	/**
	 * @param menuItemGuardarListaComo
	 *            the menuItemGuardarListaComo to set
	 */
	public void setMenuItemGuardarListaComo(JMenuItem menuItemGuardarListaComo) {
		this.menuItemGuardarListaComo = menuItemGuardarListaComo;
	}

	/**
	 * @return the panelArbol
	 */
	public JPanel getPanelArbol() {
		return panelArbol;
	}

	/**
	 * @param panelArbol
	 *            the panelArbol to set
	 */
	public void setPanelArbol(JPanel panelArbol) {
		this.panelArbol = panelArbol;
	}

	/**
	 * @return the scrollPaneArbol
	 */
	public JScrollPane getScrollPaneArbol() {
		return scrollPaneArbol;
	}

	/**
	 * @param scrollPaneArbol
	 *            the scrollPaneArbol to set
	 */
	public void setScrollPaneArbol(JScrollPane scrollPaneArbol) {
		this.scrollPaneArbol = scrollPaneArbol;
	}

	/**
	 * @return the arbolBiblioteca
	 */
	public JTree getArbolBiblioteca() {
		return arbolBiblioteca;
	}

	/**
	 * @param arbolBiblioteca
	 *            the arbolBiblioteca to set
	 */
	public void setArbolBiblioteca(JTree arbolBiblioteca) {
		this.arbolBiblioteca = arbolBiblioteca;
	}

	/**
	 * @return the fieldBuscar
	 */
	public JTextField getFieldBuscar() {
		return fieldBuscar;
	}

	/**
	 * @param fieldBuscar
	 *            the fieldBuscar to set
	 */
	public void setFieldBuscar(JTextField fieldBuscar) {
		this.fieldBuscar = fieldBuscar;
	}

	/**
	 * @return the botonEditar
	 */
	public JButton getBotonEditar() {
		return botonEditar;
	}

	/**
	 * @param botonEditar
	 *            the botonEditar to set
	 */
	public void setBotonEditar(JButton botonEditar) {
		this.botonEditar = botonEditar;
	}

	/**
	 * @return the panelBarraBotones
	 */
	public JPanel getPanelBarraBotones() {
		return panelBarraBotones;
	}

	/**
	 * @param panelBarraBotones
	 *            the panelBarraBotones to set
	 */
	public void setPanelBarraBotones(JPanel panelBarraBotones) {
		this.panelBarraBotones = panelBarraBotones;
	}

	/**
	 * @return the botonAnyadir
	 */
	public JButton getBotonAnyadir() {
		return botonAnyadir;
	}

	/**
	 * @param botonAnyadir
	 *            the botonAnyadir to set
	 */
	public void setBotonAnyadir(JButton botonAnyadir) {
		this.botonAnyadir = botonAnyadir;
	}

	/**
	 * @return the botonEliminar
	 */
	public JButton getBotonEliminar() {
		return botonEliminar;
	}

	/**
	 * @param botonEliminar
	 *            the botonEliminar to set
	 */
	public void setBotonEliminar(JButton botonEliminar) {
		this.botonEliminar = botonEliminar;
	}

	/**
	 * @return the botonLimpiar
	 */
	public JButton getBotonLimpiar() {
		return botonLimpiar;
	}

	/**
	 * @param botonLimpiar
	 *            the botonLimpiar to set
	 */
	public void setBotonLimpiar(JButton botonLimpiar) {
		this.botonLimpiar = botonLimpiar;
	}

	/**
	 * @return the botonAbrir
	 */
	public JButton getBotonAbrir() {
		return botonAbrir;
	}

	/**
	 * @param botonAbrir
	 *            the botonAbrir to set
	 */
	public void setBotonAbrir(JButton botonAbrir) {
		this.botonAbrir = botonAbrir;
	}

	/**
	 * @return the botonGuardar
	 */
	public JButton getBotonGuardar() {
		return botonGuardar;
	}

	/**
	 * @param botonGuardar
	 *            the botonGuardar to set
	 */
	public void setBotonGuardar(JButton botonGuardar) {
		this.botonGuardar = botonGuardar;
	}

	/**
	 * @return the panelVolGeneral
	 */
	public JPanel getPanelVolGeneral() {
		return panelVolGeneral;
	}

	/**
	 * @param panelVolGeneral
	 *            the panelVolGeneral to set
	 */
	public void setPanelVolGeneral(JPanel panelVolGeneral) {
		this.panelVolGeneral = panelVolGeneral;
	}

	/**
	 * @return the panelOpciones
	 */
	public JPanel getPanelOpciones() {
		return panelOpciones;
	}

	/**
	 * @param panelOpciones
	 *            the panelOpciones to set
	 */
	public void setPanelOpciones(JPanel panelOpciones) {
		this.panelOpciones = panelOpciones;
	}

	/**
	 * @return the panelVolumen
	 */
	public JPanel getPanelVolumen() {
		return panelVolumen;
	}

	/**
	 * @param panelVolumen
	 *            the panelVolumen to set
	 */
	public void setPanelVolumen(JPanel panelVolumen) {
		this.panelVolumen = panelVolumen;
	}

	/**
	 * @return the labelRepetir
	 */
	public JLabel getLabelRepetir() {
		return labelRepetir;
	}

	/**
	 * @param labelRepetir
	 *            the labelRepetir to set
	 */
	public void setLabelRepetir(JLabel labelRepetir) {
		this.labelRepetir = labelRepetir;
	}

	/**
	 * @return the labelAleatorio
	 */
	public JLabel getLabelAleatorio() {
		return labelAleatorio;
	}

	/**
	 * @param labelAleatorio
	 *            the labelAleatorio to set
	 */
	public void setLabelAleatorio(JLabel labelAleatorio) {
		this.labelAleatorio = labelAleatorio;
	}

	/**
	 * @return the labelVolumen
	 */
	public JLabel getLabelVolumen() {
		return labelVolumen;
	}

	/**
	 * @param labelVolumen
	 *            the labelVolumen to set
	 */
	public void setLabelVolumen(JLabel labelVolumen) {
		this.labelVolumen = labelVolumen;
	}

	/**
	 * @return the volumen
	 */
	public JSlider getVolumen() {
		return volumen;
	}

	/**
	 * @param volumen
	 *            the volumen to set
	 */
	public void setVolumen(JSlider volumen) {
		this.volumen = volumen;
	}

	/**
	 * @return the fuente
	 */
	public static Font getFuente() {
		return fuente;
	}

	/**
	 * @param fuente
	 *            the fuente to set
	 */
	public static void setFuente(Font fuente) {
		FormPrincipal.fuente = fuente;
	}

	/**
	 * @return the ancho
	 */
	public static Integer getAncho() {
		return ancho;
	}

	/**
	 * @param ancho
	 *            the ancho to set
	 */
	public static void setAncho(Integer ancho) {
		FormPrincipal.ancho = ancho;
	}

	/**
	 * @return the alto
	 */
	public static Integer getAlto() {
		return alto;
	}

	/**
	 * @param alto
	 *            the alto to set
	 */
	public static void setAlto(Integer alto) {
		FormPrincipal.alto = alto;
	}

	/**
	 * @return the color
	 */
	public static Color getColor() {
		return color;
	}

	/**
	 * @param color
	 *            the color to set
	 */
	public static void setColor(Color color) {
		FormPrincipal.color = color;
	}

	/**
	 * @return the colorBorde
	 */
	public static Color getColorBorde() {
		return colorBorde;
	}

	/**
	 * @param colorBorde
	 *            the colorBorde to set
	 */
	public static void setColorBorde(Color colorBorde) {
		FormPrincipal.colorBorde = colorBorde;
	}

}